﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Caixa.DAO;
using Caixa.Model;

namespace Caixa.BLL
{
	public static class MovimentacaoBLL
	{
		#region " Methods "

		#region " Get Methods "

		public static Movimentacao GetByID(int id)
		{
			return MovimentacaoDAO.GetByID(id);
		}

		public static List<Movimentacao> GetByData(Conta c, DateTime data)
		{
			return MovimentacaoDAO.GetByData(c, data);
		}

		public static List<Movimentacao> GetByPeriodo(Conta c, DateTime dataInicio, DateTime dataFim)
		{
			return MovimentacaoDAO.GetByPeriodo(c, dataInicio, dataFim);
		}

		public static double GetSaldoAnterior(Movimentacao m)
		{
			return MovimentacaoDAO.GetSaldoAnterior(m);
		}

		#endregion

		#region " DDL Methods "

		public static bool AtualizaSaldo(Movimentacao m)
		{
			//Atualiza o saldo desta movimentação e de todas 
			//as movimentações posteriores a esta
			double saldoAtual = MovimentacaoDAO.AtualizaSaldo(m);

			//Atualiza o saldo da conta desta movimentação com o saldo retornado
			Conta c = ContaBLL.GetByID(m.IDConta);
			c.Saldo = saldoAtual;
			return ContaBLL.Update(c);
		}

		public static int Insert(Movimentacao m)
		{
			m.ID = MovimentacaoDAO.Insert(m);

			// Atualiza o saldo da Conta referente esta movimentação
			if (m.ID > 0)
				AtualizaSaldo(m);

			return m.ID;
		}

		public static bool Update(Movimentacao m)
		{
			bool success = false;

			success = MovimentacaoDAO.Update(m);

			// Atualiza o saldo da Conta referente esta movimentação
			if (success)
				success = AtualizaSaldo(m);

			return success;
		}

		public static bool Delete(Movimentacao m)
		{
			bool success = false;

			success = MovimentacaoDAO.Delete(m);

			// Atualiza o saldo da Conta referente esta movimentação
			if (success)
				success = AtualizaSaldo(m);

			return success;
		}

		#endregion

		#endregion
	}
}
